﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace QLKS.Models
{
    public class PhongModel
    {
        public string MaPhong { get; set; }
        public int LoaiPhong { get; set; }
        public string TenLoaiPhong { get; set; }
        public int Tang { get; set; }
        public int ViTri { get; set; }
        public int SucChua { get; set; }
        public int TinhTrang { get; set; }
        public string TenTinhTrang { get; set; }
        public string GhiChu { get; set; }
        public double GiaTheoGio { get; set; }
        public double GiaTheoNgay { get; set; }

        public PhongModel(string maPhong, int loaiPhong, string tenLoaiPhong, int tang, int viTri, 
                int sucChua, int tinhTrang, string tentt, string ghiChu,double giaTheoGio,double giaTheoNgay)
        {
            MaPhong = maPhong;
            LoaiPhong = loaiPhong;
            TenLoaiPhong = tenLoaiPhong;
            Tang = tang;
            ViTri = viTri;
            SucChua = sucChua;
            TinhTrang = tinhTrang;
            TenTinhTrang = tentt;
            GhiChu = ghiChu;
            GiaTheoGio = giaTheoGio;
            GiaTheoNgay = giaTheoNgay;
        }
        //Lấy danh sách phòng
        static public DataTable GetDmPhong()
        {
            string query = "SELECT * FROM v_dmPhong";
            return DataProviderModel.QueryResults(query).Tables[0];
        }

        //
        static public DataTable CreateNewTable(string selectColumns)
        {
            return DataProviderModel.QueryResults(string.Format("select {0} from v_dmPhong WHERE 1=0", selectColumns.Trim() == "" ? "*" : selectColumns)).Tables[0];   
        }
        //Lấy danh sách phòng
        static public DataTable GetDmPhong(string selectColumns)
        {
            return DataProviderModel.QueryResults(string.Format("select {0} from v_dmPhong", selectColumns.Trim() == "" ? "*" : selectColumns)).Tables[0];
        }

        //Lấy danh sách phòng
        static public DataTable GetDmPhong(string selectColumns,string filter)
        {
            return DataProviderModel.QueryResults(string.Format("select {0} from v_dmPhong WHERE 1=1 AND " + filter, selectColumns.Trim() == "" ? "*" : selectColumns)).Tables[0];
        }

        //Lấy Table rỗng 
        static public DataTable CreateNewPhong()
        {
            DataTable tb = DataProviderModel.QueryResults(string.Format("select * from v_dmPhong WHERE 1=0")).Tables[0];
            DataRow r = tb.NewRow();
            int tang = GetTang().Rows.Count;
            r["tang"] = tang;
            int vitri = GetViTriPhongMax(tang) + 1; ;
            r["vitri"] = vitri;
            r["maphong"] = GetMaPhong(tang, vitri);
            r["loaiphong"] = GetMaLoaiPhong();
            r["tinhtrang"] = 1;
            r["giatheogio"] = GetGiaTienTheoGioVND(r["loaiphong"].ToString());
            r["giatheongay"] = GetGiaTienTheoNgayVND(r["loaiphong"].ToString());
            r["succhua"] = 3;
            r["ghichu"] = "";
            tb.Rows.Add(r);
            return tb;
        }
        //Get mã loại phòng
        static public int GetMaLoaiPhong()
        {
            return (int)DataProviderModel.ScalarExecute("SELECT Min(malp) FROM LoaiPhong");
        }

        //Lấy loại phòng
        static public DataTable GeLoaiPhong()
        {
            string query = "SELECT * FROM LoaiPhong";
            return DataProviderModel.QueryResults(query).Tables[0];
        }

        //Lấy dm tình trạng
        static public DataTable getDmTinhTrang()
        {
            string query = "SELECT * FROM TinhTrangPhong";
            return DataProviderModel.QueryResults(query).Tables[0];
        }

        //Lấy Số lượng tầng
        static public int GetSoLuongTang()
        {
            return (int)DataProviderModel.ScalarExecute("SELECT isnull(MAX(tang),0)  as tang FROM dmPhong");
        }

        //Lấy vị trí Tầng
        static public DataTable GetTang()
        {
            int n = (int)DataProviderModel.ScalarExecute("SELECT isnull(MAX(tang),0)  as tang FROM dmPhong");
            DataTable tb = new DataTable();
            tb.Columns.Add("tang");
            for (int i = 1; i <= n + 1; i++)
                tb.Rows.Add(i);
            return tb;
        }

        //Tính giá ngoại tệ
        static public double TinhGiaNgoaiTe(double GiaVND, string ma_nt)
        {
            object tygia = DataProviderModel.ScalarExecute("SELECT tygia FROM dmTienTe WHERE matt = '" + ma_nt + "'");
            return GiaVND / double.Parse(tygia.ToString());
        }

        //Kiểm tra phòng tồn tại
        static public bool KiemTraPhongTonTai(string ma_phong)
        {
            double n = (int)DataProviderModel.ScalarExecute("SELECT COUNT(*) FROM dmPhong WHERE maphong = '" + ma_phong + "'");
            if (n > 0)
                return true;
            return false;
        }

        //Thay đổi trạngth ái của phòng
        static public void ThayDoiTrangThaiPhong(string maphong,int tt)
        {
            try
            {
                DataProviderModel.RunExecute("Update dmPhong SET tinhtrang = '" + tt + "' WHERE maphong = '" + maphong + "'");
            }
            catch { }
        }

        //
        static public string GetTenTinhTrang(int matinhtrang) 
        {
                return DataProviderModel.ScalarExecute("SELECT tentt FROM TinhTrangPhong WHERE matt = " + matinhtrang).ToString();
        }
        //Lấy vị trí phòng lớn nhất
        static public int GetViTriPhongMax()
        {
            return (int)DataProviderModel.ScalarExecute("SELECT MAX(vitri) FROM dmPhong");
        }

        //Lấy vị trí phòng lớn nhất
        static public int GetViTriPhongMax(int tang)
        {
            return (int)DataProviderModel.ScalarExecute("SELECT isnull(MAX(vitri),0) FROM dmPhong WHERE tang = '" + tang + "'");
        }

        //Kiểm tra vị trí đã có phòng
        static public bool KiemTraViTriKhongHopLe(int tang, int vi_tri)
        {
            double n = (int)DataProviderModel.ScalarExecute("SELECT COUNT(*) FROM dmPhong p1 WHERE p1.vitri in (SELECT vitri FROM dmPhong p2 WHERE p1.tang = p2.tang and tang = " + tang.ToString() + ") and vitri = " + vi_tri.ToString());
             if (n > 0)
                return true;
             return false;
        }

        //Tự phát sinh mã phòng
        static public string GetMaPhong(int tang, int vitri)
        {
            return "P" + tang.ToString() + (vitri < 10 ? ("0" + vitri.ToString()) : vitri.ToString());
        }

        //Lấy giá phòng theo gio
        static public double GetGiaTienTheoGioVND(string maLoaiPhong)
        {
            object value =DataProviderModel.ScalarExecute("SELECT MAX(giatheogio) FROM LoaiPhong WHERE malp = '" + maLoaiPhong + "'");
            return double.Parse(value.ToString());
        }

        //Lấy giá tiền theo ngày
        static public double GetGiaTienTheoNgayVND(string maLoaiPhong)
        {
            object value = DataProviderModel.ScalarExecute("SELECT MAX(giatheongay) FROM LoaiPhong WHERE malp = '" + maLoaiPhong + "'");
            return double.Parse(value.ToString());
        }

        //Lấy vị trí phòng
        static public DataTable GetViTriPhong(int tang)
        {
            int n = (int)DataProviderModel.ScalarExecute("SELECT isnull(MAX(vitri),0) as vitri FROM dmPhong WHERE tang = " + tang);
            DataTable tb = new DataTable();
            tb.Columns.Add("vitri");
            for (int i = 1; i <= n + 1; i++)
                tb.Rows.Add(i);
            return tb;
        }

        //Thêm phòng
        static public int ThemPhong(DataTable tb)
        {
            string maphong = tb.Rows[0]["maphong"].ToString();
            if (GetDmPhong("maphong").Select("maphong ='" + maphong + "'").Length <= 0)
                return DataProviderModel.Insert(tb, "dmPhong", "");
            else
                return DataProviderModel.Update(tb, "dmPhong", "maphong");
        }

        //Xóa phòng
        static public int XoaPhong(string ma)
        {
            DataTable tb = new DataTable();
            tb.Columns.Add("maphong");
            tb.Rows.Add(ma);
            return DataProviderModel.Detele(tb, "dmPhong");
        }

        static public List<PhongModel> LayDSPhongThuocTang(int tang)
        {
            string query = "SELECT * FROM v_DmPhong where tang = " + tang;
            DataTable dt = DataProviderModel.QueryResults(query).Tables[0];
            List<PhongModel> list = new List<PhongModel>();
            foreach (DataRow dr in dt.Rows)
            {
                PhongModel ph = new PhongModel(dr["maphong"].ToString(), (int)dr["loaiphong"], dr["tenlp"].ToString(),
                    (int)dr["tang"], (int)dr["vitri"], (int)dr["succhua"], (int)dr["tinhtrang"], dr["tentt"].ToString(), 
                    dr["ghichu"].ToString(),double.Parse(dr["giatheogio"].ToString()),double.Parse(dr["giatheongay"].ToString()));
                list.Add(ph);
            }
            return list;
        }
    }
}
